package com.winchain.chainbill.bill.biz.transfer.rx;

import com.shell.bee.acct.transaction.po.AcctTxRec;
import com.shell.framework.command.CallbackContext;
import com.shell.framework.command.ChainCallback;
import com.shell.framework.rx.OnErrorNotImplementedSubscriber;
import com.winchain.chainbill.bill.base.po.CbOpt;
import com.winchain.chainbill.bill.base.po.CbXfe;
import com.winchain.chainbill.bill.biz.Bill;
import com.winchain.chainbill.bill.biz.BillTranEvent;
import com.winchain.chainbill.bill.biz.send.cmd.BillMoveCmd;
import com.winchain.chainbill.bill.biz.send.cmd.BillOptCmd;
import com.winchain.chainbill.bill.biz.transfer.cmd.BillXfeCmd;
import com.winchain.chainbill.trade.cmd.TranRollbackCmd;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class BillXfeRevRollbackPrntSubscriber extends OnErrorNotImplementedSubscriber<BillTranEvent<CbXfe>> {
	@Autowired
	private BillOptCmd<CbXfe> billOptCmd;
	@Autowired
	private BillXfeCmd billXfeCmd;
	@Autowired
	private BillMoveCmd<CbXfe> billMoveCmd;
	@Autowired
	private TranRollbackCmd<Bill<CbXfe>> tranRollbackCmd;

	public void onApplicationEvent(BillTranEvent<CbXfe> t) {
		Bill<CbXfe> source = t.getBill();
		AcctTxRec tran = t.getTran();

		CbOpt opt = new CbOpt();
		opt.setCurState("S026");
		opt.setOptCode("EX12");
		opt.setRemark("����������������������������");

		CallbackContext<Bill<CbXfe>, AcctTxRec> context = new CallbackContext();
		context.setSource(source);
		context.setTarget(tran);
		context.setValue("Operation", opt);

		ChainCallback<Bill<CbXfe>, AcctTxRec> ccb = new ChainCallback();
		ccb.add(this.billOptCmd);
		ccb.add(this.billMoveCmd);
		if (((CbXfe) source.getSource()).getXfeId() != null) {
			ccb.add(this.billXfeCmd);
		}
		ccb.add(this.tranRollbackCmd);

		ccb.callback(context);
	}
}
